package com.jvtd.gd_location.utils;

import android.annotation.SuppressLint;
import android.content.Context;

import com.amap.api.location.CoordinateConverter;
import com.amap.api.location.DPoint;

/*
 * 坐标转换工具类
 * Create by Jack Zhang
 */
public class CoordinateConvertUtil
{
  @SuppressLint("StaticFieldLeak")
  private static volatile CoordinateConvertUtil instance;
  private CoordinateConverter converter;

  private CoordinateConvertUtil(Context context)
  {
    this.converter = new CoordinateConverter(context);
  }

  public static CoordinateConvertUtil getInstance(Context context)
  {
    if (instance == null)
      synchronized (CoordinateConvertUtil.class)
      {
        if (instance == null)
          instance = new CoordinateConvertUtil(context.getApplicationContext());
      }
    return instance;
  }

  /**
   * 坐标转换
   *
   * @param fromCoordType 坐标来源类型
   *                      可选的来源包括：
   *                      <li>CoordType.BAIDU ： 百度坐标
   *                      <li>CoordType.MAPBAR ： 图吧坐标
   *                      <li>CoordType.MAPABC ： 图盟坐标
   *                      <li>CoordType.SOSOMAP ： 搜搜坐标
   *                      <li>CoordType.ALIYUN ： 阿里云坐标
   *                      <li>CoordType.GOOGLE ： 谷歌坐标
   *                      <li>CoordType.GPS ： GPS坐标
   * @param fromCoord     坐标值
   * @return 转换后的坐标值
   */
  public DPoint convert(CoordinateConverter.CoordType fromCoordType, DPoint fromCoord)
  {
    if (converter == null) return null;
    try
    {
      //设置坐标的来源类型
      converter.from(fromCoordType);
      //设置需要转换的坐标
      converter.coord(fromCoord);
      //转换成高德坐标
      return converter.convert();
    } catch (Exception e)
    {
      e.printStackTrace();
    }
    return null;
  }

  /**
   * 判断是否高德地图可用的坐标
   *
   * @param point 坐标值
   * @return true->可用 false->不可用
   */
  public boolean checkIsAvaliable(DPoint point)
  {
    //判断是否高德地图可用的坐标
    return CoordinateConverter.isAMapDataAvailable(point.getLatitude(), point.getLongitude());
  }
}
